跳到主要内容

示例

平台已连接3个数据源,需将这些数据源的数据合并后用于后续处理。

{
"workshop": {
"furnace1": {
"temp": 85
},
"furnace2": {
"humidity": 64
},
"furnace3": {
"pressure": 80
}
}
}

需使用的节点

本示例中,我们使用 join 节点来整合之前接收的多条消息。

参数(Parameter)说明(Description)
模式(Mode)

合并模式。
手动(manual):自行配置消息的合并方式。
自动(auto):基于 msg.parts 自动重组由 拆分(split) 节点拆分的消息序列。
归约序列(reduce sequence):对消息序列执行 JavaScript 归约函数,生成单个结果。

合并对象(Combine each)

想要合并的消息部分。 常用为 msg.payload,也可选择其他(如 msg.data.value)。

生成结果类型(to create)

合并后的结果类型:
合并对象(a merged Object):将所有对象合并为单个对象(后接收的同名字段会覆盖先接收的)。
键值对象(a key/value Object):以 键属性(key property)(默认 msg.topic)为键,合并对象(Combine each) 对应的内容为值。
数组(an Array):按接收顺序将每个值追加到数组中。
字符串/二进制缓存(a String / a Buffer):拼接文本或二进制数据(字符串可设置分隔符;二进制缓存直接以二进制形式拼接)。

使用已有的 msg.parts 属性(Use existing msg.parts property)

勾选后,节点会使用前置节点传入的 msg.parts 属性 (通常由 拆分(split) 节点生成)来确定消息分组规则,以及何时输出合并后的结果。 会用到 msg.parts.countmsg.parts.index 等字段。

发送消息 → 接收指定数量的消息片段后(After a number of message parts)

接收到设定数量的消息片段后,输出合并后的结果。

发送消息 → 以及后续每条新消息到达时(and every subsequent message)

勾选后,首次输出合并结果后,每有新消息到达,节点都会输出更新后的合并结果。

发送消息 → 第一条消息到达后超时触发(After a timeout following the first message)

可选配置。第一条消息到达时启动计时器,超时(单位:秒)后, 节点输出当前已收集到的所有内容的合并结果。

发送消息 → 收到含 msg.complete 属性的消息时(After a message with the msg.complete property set)

当收到携带 msg.complete = true 的消息时,立即输出合并后的结果。

(高级)字符串/二进制缓存分隔符(String/Buffer separator)

若结果类型为 字符串(String),可设置可选的分隔符; 若为 二进制缓存(Buffer),则直接拼接数据,无分隔符。

如何合并多数据源?

  1. 事件流程 中拖拽 3 个 mqtt in 节点,分别订阅对应的主题。
  1. 将 3 个节点都连接到同一个 join 节点,并配置为合并生成一个对象。
  1. 连接 debug 节点,触发流程后查看合并结果。